/*
 * MazeGame.h
 *
 *  Created on: Jan 11, 2013
 *      Author: quanpv
 */

#ifndef MAZEGAME_H_
#define MAZEGAME_H_

#include <boost/shared_ptr.hpp>
#include "Wall.h"
#include "Room.h"
#include "Maze.h"
#include "Door.h"

class MazeGame {
public:
	MazeGame();
	virtual ~MazeGame();

	boost::shared_ptr<Maze> CreateMaze();

	// factory methods:
	virtual boost::shared_ptr<Maze> MakeMaze() const
		{
			return boost::shared_ptr<Maze>(new Maze);
		}
	virtual boost::shared_ptr<Room> MakeRoom(int n) const
		{
			return boost::shared_ptr<Room>(new Room(n));
		}
	virtual boost::shared_ptr<Wall> MakeWall() const
		{
			return boost::shared_ptr<Wall>(new Wall);
		}
	virtual boost::shared_ptr<Door> MakeDoor(boost::shared_ptr<Room> r1, boost::shared_ptr<Room> r2) const
		{
			return boost::shared_ptr<Door>(new Door(r1, r2));
		}
};

#endif /* MAZEGAME_H_ */
